﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Negocio.Gestores;
using Negocio.Entidades;

namespace autogestionAVEIT
{
    public partial class NuevaBoleta : System.Web.UI.Page
    {
        private static DataTable dt;
        private static DataRow dr;
        private static int[][] numeros;
        private static List<Premio> LiPremio;
        
        private static double resto = 0;
        

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {                
                if (dt == null)
                {
                    dt = new DataTable();                    
                }
            }            
        }

        protected void btn_cargarBoleta_Click(object sender, EventArgs e)
        {
            if (!GestorRifas.esPosibleboleta())
            {
                panel_cuerpo.Visible = true;
                lbl_encabezado1.Text = "Nueva ";
            }
            else
            {
                panel_cuotas.Visible = true;
                panel_definir_cuotas.Visible = false;
                lbl_texto1.Text = "No se puede Diagramar por este año una nueva RIFA";
                lbl_texto2.Text = "";
                lbl_texto3.Text = "";
                lbl_texto4.Text = "";
                btn_si.Visible = false;
                btn_no.Visible = false;
                if (!GestorRifas.esPosibleSorteo())
                {
                    lbl_texto2.Text = "Pero todavía no diagramo los sorteos..!!";
                    panel_rifa.Visible = true; 
                }
                panel_asignar_boleta.Visible = true;
            }
            
        }        

        protected void btn_guardar_Click(object sender, EventArgs e)
        {
            
            Double precio = double.Parse(txt_precio_boleta.Text);
            int cuotas = int.Parse(txt_cantidad_cuotas.Text);
            
            resto= precio / cuotas;
            if (precio % cuotas==0)
            {
                panel_cuotas.Visible = true;
                lbl_texto1.Text = "El importe de cada CUOTA quedaria conformado por el siguiente importe";
                lbl_texto2.Text = "$:"+resto;
                lbl_texto3.Text = "Y los numeros por boletas quedan conformado de la siguiente manera...: ";
                lbl_texto_grilla1.Text = "Se an generado "+txt_cantidad_boletas.Text+" boletas...!!";
                lbl_texto4.Text = "Acepta la distribucion de numeros por boletas..?";
                btn_si.Visible = true;
                btn_si.Focus();
                btn_no.Visible = true;
                               
                cargarGrillaNumeros(numerosBoletas());               
            }
            else
            { 
                panel_cuotas.Visible = true;
            }

            

        }

        private DataTable numerosBoletas()
        {
            int numerosXB= int.Parse(txt_numeros_boleta.Text);
            int boletas = int.Parse(txt_cantidad_boletas.Text);
            numeros = new int [numerosXB][];
            int numeroMinimo=6000;
            int numeroMaximo=numeroMinimo + (numerosXB * boletas);
            numeroMinimo++;
            int numeracion=0;
            dt = new DataTable();
            
            dt.Columns.Add("Numeracion");
            for (int i = 0; i < numerosXB; i++)
            {
                dt.Columns.Add("Numeros " + i);
            }             
            
            for (int i = 0; i < numerosXB; i++)
            {
                numeros[i] = new int[boletas];
                for (int ii = 0; ii < boletas;ii++ )
                {
                    numeros[i][ii] = numeroMinimo++;                   
                }
            }
            int colFila = 0;
            for (int i = 0; i < boletas; i++)
            {

                dr = dt.NewRow();
                numeracion++;
                dr[0] = numeracion.ToString();
                for (int ii = 0; ii < numerosXB; ii++)
                {
                    colFila = ii + 1;
                    dr[colFila] = numeros[ii][i].ToString();
                }
                dt.Rows.Add(dr);

            }
            return dt;
            
            
        }

        private List<Cuotas> listaCuotas()
        {
            List<Cuotas> cuotas=new List<Cuotas>();
            for(int i=0; i<int.Parse(txt_cantidad_cuotas.Text); i++)
            {
                Cuotas c =new Cuotas(i+1,0);
                cuotas.Add(c);
            }
            return cuotas;
        }

        public class Cuotas
        {
            public int cuota {set; get;}
            public double importe {set; get;}
            public Cuotas(int cuota, double importe)
            {
                this.cuota = cuota;
                this.importe = importe;
            }
        }       

        protected void GV_cuotas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GV_cuotas.PageIndex = e.NewPageIndex;
            cargarGrillaNumeros(dt);
        }

        private void cargarGrillaNumeros(DataTable dt)
        {
            GV_cuotas.DataSource = dt;
            GV_cuotas.DataBind();
 
        }

        protected void btn_si_Click(object sender, EventArgs e)
        {
            panel_rifa.Visible = true;
            
            panel_definir_cuotas.Visible = false;
        }

        protected void btn_grilla_Click(object sender, EventArgs e)
        {
            GV_cuotas.Visible = true;
        }

        protected void btn_no_Click(object sender, EventArgs e)
        {
            limpiarCampos();
        }

        protected void Button3_Click(object sender, EventArgs e)
        {
            GV_cuotas.Visible = false;
        }       

        protected void btn_aceptar_2_Click(object sender, EventArgs e)
        {
            
            txt_fecha_sorteo.Focus();
            grabarBoleta();
            
        }

        private void cargarCampos(int bandera)
        {
            if (bandera == 1)
            {
                //ddl_tipo_sorteo.DataTextField = "descripcion";
                //ddl_tipo_sorteo.DataValueField = "id_tipoSorteo";
                //ddl_tipo_sorteo.DataSource = GestorRifas.ObtenerDDLTipoSorteo();
                //ddl_tipo_sorteo.DataBind();
                //ddl_tipo_sorteo.Items.Insert(0, new ListItem("Seleccione un Tipo De Sorteo", "0"));
                //ddl_tipo_sorteo.SelectedIndex = 0;  // opcion insertada en la primera posicion
            }
            if(bandera==2)
            {
                ddl_premios.DataTextField = "nombre";
                ddl_premios.DataValueField = "id_premio";
                ddl_premios.DataSource = GestorPremios.ObtenerTodos();
                ddl_premios.DataBind();
                ddl_premios.Items.Insert(0, new ListItem("Seleccione un Proveedor", "0"));
                ddl_premios.SelectedIndex = 0;  // opcion insertada en la primera posicion
            }
        }

    

        private void limpiarCampos()
        {
            panel_cuerpo.Visible = false;
            panel_cuotas.Visible = false;
            panel_definir_cuotas.Visible = false;
            //panel_fechas_sorteos.Visible = false;
            panel_rifa.Visible = false;
            lbl_texto1.Text = "";
            lbl_texto2.Text = "";
            lbl_texto3.Text = "";
            lbl_texto4.Text = "";
 
        }

        protected void btn_cancelar_Click(object sender, EventArgs e)
        {
            limpiarCampos();
        }

        protected void btn_cancelar_2_Click(object sender, EventArgs e)
        {
            limpiarCampos();
        }

        protected void btn_agregar_premio_Click(object sender, EventArgs e)
        {
            panel_premios.Visible = true;
            cargarCampos(2);
            LiPremio = new List<Premio>();
        }

        protected void btn_agregar_Click(object sender, EventArgs e)
        {            
            LiPremio.Add(GestorPremios.ObtenerTodosDDL(int.Parse(ddl_premios.SelectedValue)));
            GVPremios_sorteos.DataSource = LiPremio;
            GVPremios_sorteos.DataBind();
        }

        private void grabarSorteo()
        {
            Sorteo s = new Sorteo();
            s.numero = int.Parse(GestorSorteo.ultimoNumeroSorteoMismoAño(DateTime.Today.Year).ToString())+1;
            s.año = DateTime.Today.Year;
            s.tipo_sorteo.id_tipo_sorteo = 2;            
            s.fecha_sorteo = txt_fecha_sorteo.Text;
            int registroSorteo = 0;
            int numeroOrden = 0;
            int id_premio = 0;
            registroSorteo = GestorSorteo.grabarSorteo(s);
            for(int i=0;i<GVPremios_sorteos.Rows.Count;i++)
            {                
                numeroOrden = GestorSorteo.ultimoNumeroOrdenParaSorteo(registroSorteo)+1;
                string ii = GVPremios_sorteos.Rows[i].Cells[0].Text.ToString();
                id_premio=int.Parse(ii);
                GestorSorteo.grabarDetalleSorteo(registroSorteo, numeroOrden, id_premio);
            }
            

        }

        private void grabarBoleta()
        {
            for (int i = 0; i < int.Parse(txt_cantidad_boletas.Text); i++)
            {
                Boleta bol = new Boleta();
                bol.numeracion = i + 1;
                bol.año = DateTime.Today.Year;
                bol.descripcion = "año 2015";
                bol.cupones = new List<Cupon>();
                bol.numeroParticipante = new long?[int.Parse(txt_numeros_boleta.Text)];
                for (int ji = 0; ji < int.Parse(txt_cantidad_cuotas.Text); ji++)
                {
                    Cupon c = new Cupon();
                    c.importe = (float)resto;
                    c.numero_cuota = ji + 1;                    
                    bol.cupones.Add(c);
                }
                for (int ii = 0; ii < int.Parse(txt_numeros_boleta.Text); ii++)
                {
                    bol.numeroParticipante[ii] = numeros[ii][i];
                }
                GestorRifas.grabarBoleta(bol);
            }
        }

        protected void Finalizar_Click(object sender, EventArgs e)
        {
            grabarSorteo();
            limpiarCampos();
            panel_cuotas.Visible = true;
            lbl_texto1.Text = "Se grabo la boleta y los sorteos de forma exitosa.";
        }

        protected void btn_asignar_Click(object sender, EventArgs e)
        {
            try
            {
                GestorRifas.asignarBoletasASocios(DateTime.Today.Year);
            }
            catch (Exception e2)
            {
                limpiarCampos();
                panel_cuotas.Visible = true;
                lbl_texto1.Text = "";
                lbl_texto2.Text = "No se pudo asignar las boletas. " + e2.Message;
            }
        }
        
    }
}